package movimiento;

import numeros.*;
import fecha.*;

public class Satelite {
	private double dFrecuencia = 0.0;
	private double dRapidezAngular = 0.0;
	private double a = 0.0; //Semi eje orbital
	private double M = 0.0; //Anomalia media
	private double E = 0.0; //Anomalia Excentrica
	private double f = 0.0; //Anomalia verdadera
	private double dRadioVector = 0.0; //Radio Vector
	private double dPasoPerigeo = 0.0;
	private FechaActual faObservador;// = new FechaActual();
	private ElementosKeplerianos ek;
	
	public double getdFrecuencia() {
		return dFrecuencia;
	}

	public void setdFrecuencia(double dF) {
		dFrecuencia = dF/Constantes.segundoDia;
	}

	public double getdRapidezAngular() {
		return dRapidezAngular;
	}

	public void setdRapidezAngular() {
		dRapidezAngular = 2 * Math.PI * dFrecuencia;
	}

	public double getA() {
		return a;
	}

	public void setA() {
		a = Math.pow((Constantes.K * Constantes.M)/(Math.pow(dRapidezAngular, 2.0)),(1/3));
	}

	public double getM() {
		return M;
	}

	public void setM(double d) {
		double dHorasDia = 0.0;
		faObservador = new FechaActual();
		ConversionesTiempo ct = new ConversionesTiempo(faObservador.getiHora(),
													faObservador.getiMinutos(),faObservador.getdSegundos());
		dHorasDia = ct.getdHorasDecimal();
		M = ek.getdMovimientoMedio()*(dHorasDia - d);
	}

	public double getdPasoPerigeo() {
		return dPasoPerigeo;
	}

	public void setdPasoPerigeo(double dMovimientoMedio) {
		dPasoPerigeo = ek.getdTiempoPasoPerigeoInicial()+(ek.getdTiempoPasoPerigeo()/
				(360*(dMovimientoMedio)));
	}

	public double getE() {
		return E;
	}

	public void setE(double dExcentricidad) {
		ConversionesNumeros cn = new ConversionesNumeros();
		cn.setdRadianes(M);
		double dRadianesAnomalia = cn.getdRadianes();
		double M1 = 0.0;
		double dDeltaE = 0.0;
		double E2 = 0.0;
		double M2 = 0.0;
		double dDeltaE2 = 0.0;
		
		E = M + (ek.getdExcentricidad()*Math.sin(dRadianesAnomalia)) + (.5 * 
				Math.pow(ek.getdExcentricidad(), 2.0) * (2 * Math.sin(dRadianesAnomalia) * Math.cos(dRadianesAnomalia)));
		M1 = E - (ek.getdExcentricidad()*Math.sin(E));
		dDeltaE = (M - M1)/(1 - (dExcentricidad*Math.cos(E)));
		E2 = E +dDeltaE;
		M2 = E2 - ( ek.getdExcentricidad() * Math.sin(E2));
		dDeltaE2 = (M - M2)/(1 - (dExcentricidad*Math.cos(E2)));
		E = E2 + dDeltaE2;
	}

	public double getF() {
		return f;
	}

	public void setF(double dExcentricidad) {
		f = Math.atan((Math.sqrt(1 - Math.pow(dExcentricidad, 2.0)) * Math.sin(E))/(Math.cos(E)-ek.getdExcentricidad()));
	}

	public double getdRadioVector() {
		return dRadioVector;
	}

	public void setdRadioVector(double a, double e) {
		 dRadioVector = (a*(1 - Math.pow(e,2.0)))/
		 (1 + (e * Math.cos(f)));
	}
	
	
	
}
